home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 2 / United Public Domain Gold 2.iso / utilities / pu367.dms / pu367.adf / McMaster / Source / MCMaster.h < prev    next >
C/C++ Source or Header  |  1992-06-26  |  22KB  |  526 lines

  1. /*
  2.  *    © 1992 by Michael Watzl
  3.  */
  4.  
  5. #include    <exec/io.h>
  6. #include    <devices/printer.h>
  7. #include    <intuition/intuitionbase.h>
  8. #include    <intuition/gadgetclass.h>
  9. #include    <intuition/preferences.h>
  10. #include    <workbench/startup.h>
  11. #include    <workbench/icon.h>
  12. #include    <workbench/workbench.h>
  13. #include    <libraries/gadtools.h>
  14. #include    <libraries/asl.h>
  15. #include    <dos/dos.h>
  16. #include    <dos/dosextens.h>
  17. #include    <dos/rdargs.h>
  18. #include    <graphics/gfxbase.h>
  19. #include    <graphics/displayinfo.h>
  20. #include    <exec/memory.h>
  21. #include    <devices/printer.h>
  22. #include    <stdio.h>
  23.  
  24. #include    <clib/intuition_Protos.h>
  25. #include    <clib/dos_Protos.h>
  26. #include    <clib/graphics_Protos.h>
  27. #include    <clib/exec_Protos.h>
  28. #include    <clib/gadtools_protos.h>
  29. #include    <clib/icon_protos.h>
  30. #include    <clib/utility_protos.h>
  31. #include    <clib/wb_protos.h>
  32. #include    <clib/asl_protos.h>
  33. #include    <clib/alib_protos.h>
  34.  
  35. union printerIO {
  36.     struct IOStdReq    ios;
  37.     struct IODRPReq    iodrp;
  38.     struct IOPrtCmdReq iopc;
  39. };
  40.  
  41.  
  42.  
  43. WORD    strlen(STRPTR string);
  44. STRPTR    strcpy(STRPTR to , STRPTR from );
  45. STRPTR    strncpy(STRPTR to , STRPTR from , WORD n);
  46. WORD    atoi(STRPTR numberstring);
  47. STRPTR    strcat(STRPTR to, STRPTR from );
  48. STRPTR    strncat(STRPTR to,STRPTR from , WORD n);
  49.  
  50. VOID    exit(WORD rc);
  51.  
  52. /****************************************/
  53. /*                    */
  54. /*    ProtoTypes for all my fkts        */
  55. /*                    */
  56. /****************************************/
  57.  
  58. VOID    PrintList(ULONG Mode);
  59. VOID    PrintOut(WORD start,end, UWORD Mode);
  60. WORD    Print( VOID );
  61.  
  62. VOID    UpdatePGads(WORD new,x);
  63. WORD    RefreshGads(WORD new);
  64.  
  65. VOID    GetIDCMP( VOID );
  66. VOID    GetMenu(UWORD n);
  67. WORD    ChangeCurrent(WORD new);
  68. WORD    Load(STRPTR name);            /* if name is specified it'll be loaded at once */
  69. VOID    SetScreenColors( VOID );
  70. BOOL    RequestMyFile(UWORD Mode);
  71. WORD    Save(STRPTR name);    /* same as load */
  72. WORD    Palette(VOID);
  73.  
  74. VOID    CreateList(ULONG Mode);
  75. VOID    RemakeList( VOID );
  76. VOID    UpdateNodeName(WORD n);
  77. VOID    RemoveCurrentNode( VOID );
  78. WORD    AddNode(STRPTR name);
  79. VOID    UpdateList( VOID );
  80.  
  81. WORD    Search(STRPTR name, UWORD Mode);
  82. VOID    QuickSort(WORD start,end);
  83.  
  84. VOID    InitGads( VOID );
  85. VOID    InitList( VOID );
  86. VOID    CompleteGads(struct NewGadget *ng);
  87. VOID    InitTags( VOID );
  88.  
  89. WORD    quit( STRPTR errtxt );
  90. VOID    usermessage(STRPTR text);
  91.  
  92. VOID    wbmain( struct WBStartup *msg);
  93. VOID    fromcli(WORD argc, STRPTR *argv);
  94. VOID    main(WORD argc, STRPTR *argv);
  95.  
  96. VOID    getcolor(WORD index);
  97. VOID    setcolor(WORD index);
  98. VOID    restorecolor( VOID );
  99.  
  100. BOOL    getmem(WORD number);
  101. STRPTR    fitstring(STRPTR name, WORD length);
  102. STRPTR    cutstring(STRPTR name, WORD length);
  103. STRPTR    itos(STRPTR string, ULONG integer);
  104. WORD    c2hex(WORD c);
  105. WORD    hex2c(WORD c);
  106. ULONG    ahex2ulong( STRPTR ahex );
  107.  
  108. /* Printer */
  109. BOOL    OpenPrinter( VOID );
  110. BOOL    InitPrinter( VOID );
  111. VOID    ResetPrinter( VOID );
  112. VOID    ClosePrinter( VOID );
  113. VOID    SendBuffer( STRPTR Buffer , UWORD Mode );
  114. VOID    SendCommand( UWORD Command , UBYTE par0,par1,par2,par3 );
  115.  
  116.  
  117. /****************************************/
  118. /*                    */
  119. /*         the definitions        */
  120. /*                    */
  121. /****************************************/
  122.  
  123. #define    MAXNODES    (2*13*MaxCass)                /* MaxNumber of listentries */
  124. #define    MAXCHARS    64                    /* Chars per Name */
  125. #define MAXLCHARS    180                    /* Max Chars in a Line -> LVG , SuperHires is allowed! */
  126. #define CODE        '#'                    /* This is a primitive file format recognition */
  127. #define    CANCEL_ERR    5                    /* Load()/save() return codes */
  128. #define    OPEN_ERR    10
  129.  
  130. #define XOFFSET     10                    /* Offsets Border <-> Gadget */
  131. #define YOFFSET     9
  132. #define SREQ_WIDTH    400                    /* Dimensions of the Search Requester (acutally a window) */
  133. #define SREQ_HEIGHT    130
  134.  
  135. #define    NTSC        0                    /* Displaymodes */
  136. #define PAL         1
  137. #define VGA        3
  138.  
  139. #define ASLWIDTH    400                    /* ASL Size */
  140. #define ASLHEIGHT    200
  141. #define DEFNAME        "MCDataSet.mc"                /* default filename */
  142.  
  143.  
  144. /****************************************/
  145. /*                    */
  146. /*    Userdata for the Menus        */
  147. /*                    */
  148. /****************************************/
  149.  
  150. #define MENU_PROJ_BASE        1
  151. #define    MENU_PROJ_LOAD        MENU_PROJ_BASE
  152. #define    MENU_PROJ_SAVE        MENU_PROJ_BASE+1
  153. #define    MENU_PROJ_SAVEAS    MENU_PROJ_BASE+2
  154. #define    MENU_PROJ_INFO        MENU_PROJ_BASE+3
  155. #define    MENU_PROJ_ABOUT        MENU_PROJ_BASE+4
  156. #define    MENU_PROJ_QUIT        MENU_PROJ_BASE+5
  157. #define MENU_PROJ_PRINT        MENU_PROJ_BASE+6
  158. #define    MENU_PROJ_DELETE    MENU_PROJ_BASE+7
  159.  
  160. #define    MENU_SEARCH_BASE    10
  161. #define MENU_SEARCH_INTER       MENU_SEARCH_BASE+1    /* 001 */
  162. #define MENU_SEARCH_LP          MENU_SEARCH_BASE+2    /* 010 */
  163. #define MENU_SEARCH_SONG        MENU_SEARCH_BASE+4    /* 100 */
  164. #define MENU_SEARCH_ANYTHING    MENU_SEARCH_BASE+7    /* 111 */
  165.  
  166. #define MENU_LIST_BASE        20
  167. #define MENU_LIST_INTER        MENU_LIST_BASE+0
  168. #define MENU_LIST_LP            MENU_LIST_BASE+1
  169. #define MENU_LIST_SONG          MENU_LIST_BASE+2
  170.  
  171. #define    MENU_SPECIAL_BASE    30
  172. #define MENU_SPECIAL_NAME       MENU_SPECIAL_BASE
  173. #define MENU_SPECIAL_EDIT       MENU_SPECIAL_BASE+1
  174. #define MENU_SPECIAL_PALETTE    MENU_SPECIAL_BASE+2
  175.  
  176.  
  177. /****************************************/
  178. /*                    */
  179. /*   Different Modi for some fkts    */
  180. /*                    */
  181. /****************************************/
  182.  
  183. #define FRQ_LOAD         0            /* Modes for the FileRequester */
  184. #define FRQ_SAVE         1
  185.  
  186. #define SEARCH_INTER    0x01                /* Modes for the search routine */
  187. #define SEARCH_LP    0x02                /* lower nibble for search object */
  188. #define SEARCH_SONG    0x04
  189. #define SEARCH_ANYTHING    (SEARCH_INTER|SEARCH_LP|SEARCH_SONG)
  190. #define TOP_SEARCH    0x10                /* upper nibble for search start */
  191. #define NEXT_SEARCH    0x20
  192.  
  193. #define    DRAFT           0                /* Print Modes */
  194. #define    LQ              1
  195.  
  196.  
  197. /****************************************/
  198. /*                    */
  199. /*    "simplifications"        */
  200. /*                    */
  201. /****************************************/
  202.  
  203. #define    SHIFTKEYS    (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT)    /* for easy rawkey handling! */
  204. #define ALTKEYS        (IEQUALIFIER_LALT|IEQUALIFIER_RALT)
  205. #define    RAW_F        0x23
  206. #define    RAW_T        0x14
  207. #define    RAW_D        0x22
  208. #define    RAW_L        0x28
  209. #define    RAW_O        0x18
  210. #define    RAW_C        0x33
  211.  
  212. /****************************************/
  213. /*                    */
  214. /*    for the printer            */
  215. /*                    */
  216. /****************************************/
  217.  
  218. #define    LINE_LENGTH    256
  219. #define    LINE        "________________________________________________________________\n"
  220. #define CPI15        SendCommand( aSHORP4 , 0,0,0,0 )
  221. #define    CPI10        SendCommand( aSHORP0 ,0,0,0,0)
  222. #define    LINE_FEED    SendBuffer("\n", CMD_WRITE )
  223. #define    FORM_FEED    SendBuffer("\f", CMD_WRITE )
  224.  
  225. /****************************************/
  226. /*                    */
  227. /*    Protostructures            */
  228. /*                    */
  229. /****************************************/
  230.  
  231. struct MCData
  232. {                            /* Prototype of Cassette-data struct */
  233.     UBYTE  Name[30][MAXCHARS];                /* 15 Names per Side (Titles included) */
  234.     WORD  NR[2];                    /* Noise Red. 0->A 1->B */
  235.     WORD  Source[2];                /* Source */
  236. };
  237. struct ListEntry {                    /* This contains the relevant data fot */
  238.     struct Node     Label;                /* the listview nodes */
  239.     UBYTE         LabelName[MAXLCHARS];
  240. };
  241.  
  242.  
  243. /****************************************/
  244. /*                    */
  245. /*          Global Vars        */
  246. /*                    */
  247. /****************************************/
  248.  
  249. static    UBYTE   *VersTag = "\0$VER: MCMaster 1.1 (5.5.1992)";
  250.  
  251. VOID    *vi;                        /* var for VisualInfo */
  252. WORD    MaxCass = 60;                    /* By default space for 60 mcs will be allocated */
  253.  
  254. WORD    r[4],g[4],b[4],col;                /* Colors (for Palette) */
  255. WORD    col0[3][4];                    /* saved colors, for canceling the palette */
  256. WORD    activegad=0;                    /* I need this for the palette (slidergads) */
  257. WORD    frommc=1,tomc=2;                /* for the printwin */
  258. struct    DiskObject *mydob=NULL;                /* Pointer to my DOB, indicator of WB/CLI start */
  259. UBYTE    myname[34];                    /* Name of DiskObject */
  260. UBYTE    toolstr[5][128];
  261. struct    MCData *cass;                    /* pointer to datafield, which will be allocated */
  262. UBYTE   uname[30][MAXLCHARS];                /* Undo Buffer for StrGads, also used for a lot of other things*/
  263. UBYTE    ownername[3][MAXCHARS];                /* Strings for the owner's name */
  264. UBYTE    lastfname[64]=DEFNAME, lastdname[128]="";    /* Buffer for file/dir names of ASL-req */
  265. BOOL    fastexit=TRUE;                    /* Flag for "really quit" req */
  266. WORD    current=1;                    /* currently shown mc */
  267.  
  268. ULONG   DisplayID    = HIRES_KEY;            /* Defaults for the ToolTypes */
  269. WORD    Oscan        = NULL;
  270. UBYTE    Database[256], Colors[256]="8AC002FFFEB2";
  271.  
  272. struct  List    LabelList    = {NULL,NULL,NULL,0,0}; /* This is for the ListView */
  273. struct    Node    TailNode    = {NULL,NULL,0,0,NULL}; /* Last Node, "Tail" of NodeList */
  274. WORD    LastNode;                    /* Number of TailPred Node */
  275. struct    ListEntry    *LEntry;            /* HEAD- to TailPred-Nodes are allocated in getmem() */
  276.  
  277. BOOL    PDOPEN    = FALSE;                /* is the printer ready? */
  278. UBYTE    prepbuffer[LINE_LENGTH+5];    /* prepared buffer -> see prepbuffer() */
  279. UBYTE    rawbuffer [LINE_LENGTH+5];    /* for reading a line "raw" */
  280.  
  281.  
  282. /****************************************/
  283. /*                    */
  284. /*    Constants            */
  285. /*                    */
  286. /****************************************/
  287.  
  288. const STRPTR    NR[]        = {"Dolby C","Dolby B","NO NR.","DBX",NULL};    /* for the noise reduction CycleGadget */
  289. const STRPTR    Source[]    = {"CD","LP","Radio","Mixed","Unknown",NULL};    /* for the source cyclegad */
  290. const STRPTR    what[]        = {"interprets","album names","song names","anything"};    /* search/list mode string */
  291. const STRPTR    OscanName[]    = {"NONE","TEXT","STANDARD","MAX","VIDEO"};
  292. const struct    TextAttr TOPAZ80= {"topaz.font",8,0,0};                /* used font */
  293. const UWORD    PenData[]     = {3,1,1,2,1,3,1,0,2,-1};                    /* for the 3D Look for Screen */
  294.  
  295.  
  296. /****************************************/
  297. /*                    */
  298. /*      Structs/Data            */
  299. /*                    */
  300. /****************************************/
  301.  
  302. struct IconBase        *IconBase;                    /* All the needed Libs! */
  303. struct IntuitionBase    *IntuitionBase;                    /* DICE handles the dos.library */
  304. struct GfxBase        *GfxBase;
  305. struct GadToolsBase    *GadToolsBase;
  306. struct AslBase        *AslBase;
  307. struct UtilityBase    *UtilityBase;
  308.  
  309. /* IO stuff */
  310. union printerIO     *printerReq;
  311. struct MsgPort        *printer_mp;        /* Port for printer */
  312.  
  313. struct ViewPort        *vp;
  314. struct MonitorInfo     monitorinfo;
  315. struct DimensionInfo     dimensioninfo;
  316. struct ColorSpec    colorspec[5];
  317. struct RDArgs        *cliargs;
  318. struct Window        *window, *searchwin, *listwin, *namewin, *printwin, *palwin;
  319. struct Window        *olderrwin;
  320. struct Screen        *screen;
  321. struct Menu        *menu;
  322. struct IntuiMessage    *message;
  323. struct Gadget        *congad, *gad;                /* pointer to gadgetcontext, all round gadget pointer */
  324. struct Gadget        *noiseAgad,*noiseBgad,*sourceAgad,*sourceBgad,*listviewgad, *nextgad, *prevgad, *currentgad; /* Gadgets of the main window */
  325. struct Gadget        *printcon, *pos1gad, *pos2gad;      /* for the print window */
  326. struct Gadget        *rslider, *gslider, *bslider, *palcon;    /* for the palette win */
  327.  
  328.  
  329. /****************************************/
  330. /*                    */
  331. /*    EasyReqs and Freqs        */
  332. /*                    */
  333. /****************************************/
  334.  
  335. struct EasyStruct easyerror = {sizeof(struct EazyStruct),0,"MC request",NULL,"UNDERSTOOD"};    /* Easy Reqs */
  336. struct EasyStruct easyquit  = {sizeof(struct EazyStruct),0,"MC Request","You did not save the last changes!\nReally Quit?","Bye bye|Stay here!"};    /* Easy Reqs */
  337. struct EasyStruct easyabout = {sizeof(struct EazyStruct),0,"MCMaster V1.1","MCMaster\n  © 1992 by  Michael Watzl\n             Konradstraße 11\n             8850 Donauwörth, GERMANY\n\nYou are free to send bug reports, donations or anything else.\n","Great Stuff!"};    /* Easy Reqs */
  338. struct EasyStruct easyinfo  = {sizeof(struct EazyStruct),0,"MCMaster V1.1","MCMaster                  Information\n\nThere are %ld of maximal %ld mcs in memory.\n------------------------------------------\nFree Mem:\n\n  Chip : %10ld\n  Fast : %10ld\n\nPerferences Printer: %s\n------------------------------------------\n© 1992 by Michael Watzl","OK"};    /* Easy Reqs */
  339. struct EasyStruct easyfound = {sizeof(struct EazyStruct),0,"MCMaster V1.1",NULL,"I see"};    /* Easy Reqs */
  340. struct EasyStruct easydelete= {sizeof(struct EazyStruct),0,"MCMaster V1.1","Really delete MC %ld\nContents:\n Side A: %s, %s   \n Side B: %s, %s   \n","DELETE!|Oh No!"};    /* Easy Reqs */
  341. struct EasyStruct easyprint = {sizeof(struct EazyStruct),0,"MCMaster V1.1","Print\nfrom %ld: Side A: %s, %s   \n         Side B: %s, %s\n\n  to %ld: Side A: %s, %s   \n         Side B: %s, %s\n","PRINT!|Get Back|Abort Print"};    /* Easy Reqs */
  342. struct EasyStruct easyprintl= {sizeof(struct EazyStruct),0,"MCMaster V1.1","Are you sure?\nPrint this list of all %s?\n","PRINT!|Cancel"};    /* Easy Reqs */
  343.  
  344. struct FileRequester *filerequester;            /* AslStyle! */
  345.  
  346.  
  347. /****************************************/
  348. /*                    */
  349. /*        Tag Lists        */
  350. /*                    */
  351. /****************************************/
  352.  
  353. struct    TagItem screentag[] = {
  354.     SA_Left,    0,
  355.     SA_Width,    640,
  356.     SA_Height,    200,
  357.     SA_Depth,    2,
  358.     SA_Font,    &TOPAZ80,
  359.     SA_Quiet,    TRUE,
  360.     SA_DisplayID,    HIRES_KEY,
  361.     SA_Pens,    PenData,
  362.     SA_Colors,    NULL,
  363.     SA_Overscan,    NULL,
  364.     TAG_DONE,    0};
  365. struct TagItem AslTag[] = {                /* TagItems for the File Requester */
  366.     ASL_OKText,    "LOAD",        /* Do not change the order of these Tags! */
  367.     ASL_Window,    NULL,
  368.     ASL_Hail,    NULL,
  369.     ASL_FuncFlags,    FILF_PATGAD,
  370.     ASL_File,    DEFNAME,
  371.     ASL_Dir,    NULL,
  372.     ASL_LeftEdge,    (640-ASLWIDTH)/2,
  373.     ASL_TopEdge,    0,
  374.     ASL_Width,    ASLWIDTH,
  375.     ASL_Height,    ASLHEIGHT,
  376.     ASL_Pattern,    "#?.mc",
  377.     TAG_DONE,    0};
  378. struct TagItem searchwintag[]= {            /* Window Tags for search win */
  379.     WA_Height    ,SREQ_HEIGHT,
  380.     WA_Width    ,SREQ_WIDTH,
  381.     WA_Left        ,(640-SREQ_WIDTH)/2,
  382.     WA_Top        ,(200-SREQ_HEIGHT)/2,
  383.     WA_Title    ,"Sneekin' around...",
  384.     WA_Flags    ,WFLG_ACTIVATE|WFLG_RMBTRAP|WFLG_CLOSEGADGET|WFLG_DRAGBAR,
  385.     WA_IDCMP    ,STRINGIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_VANILLAKEY,
  386.     WA_Gadgets    ,NULL,
  387.     WA_CustomScreen    ,NULL,
  388.     TAG_DONE    ,0};
  389. struct TagItem printwintag[] = {    /* Window Tag List for the printwindow */
  390.     WA_Height    ,140,
  391.     WA_Width    ,640,
  392.     WA_Left        ,0,
  393.     WA_Top        ,(200-140)/2,
  394.     WA_Flags    ,WFLG_ACTIVATE|WFLG_RMBTRAP|WFLG_CLOSEGADGET|WFLG_DRAGBAR,
  395.     WA_IDCMP    ,STRINGIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_RAWKEY|MXIDCMP|SCROLLERIDCMP,
  396.     WA_Gadgets    ,NULL,
  397.     WA_CustomScreen    ,NULL,
  398.     WA_Title    ,"Print MCCovers",
  399.     TAG_DONE    ,0};
  400. struct TagItem listwintag[]= {        /* Window Tags for the list window */
  401.     WA_Title    ,NULL,
  402.     WA_Flags    ,WFLG_ACTIVATE|WFLG_RMBTRAP|WFLG_CLOSEGADGET,
  403.     WA_IDCMP    ,LISTVIEWIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_VANILLAKEY,
  404.     WA_Gadgets    ,NULL,
  405.     WA_CustomScreen    ,NULL,
  406.     TAG_DONE    ,0};
  407. struct TagItem namewintag[] = {        /* window tag list for the name window */
  408.     WA_Flags,    WFLG_ACTIVATE|WFLG_CLOSEGADGET|WFLG_DRAGBAR,
  409.     WA_IDCMP,    IDCMP_CLOSEWINDOW|STRINGIDCMP,
  410.     WA_Title,    "Enter new name",
  411.     WA_Left,    120,
  412.     WA_Top,        45,
  413.     WA_Width,    400,
  414.     WA_Height,    100,
  415.     WA_Gadgets,    NULL,
  416.     WA_CustomScreen,NULL,
  417.     TAG_DONE,    0};
  418. struct    TagItem SliderItem[] = {
  419.     GA_FollowMouse,        TRUE,
  420.     GTSL_Min,        0,
  421.     GTSL_Max,        15,
  422.     GTSL_Level,        0,
  423.     GTSL_LevelFormat,    "%2ld",
  424.     GA_RelVerify,        TRUE,
  425.     GA_Immediate,        TRUE,
  426.     GTSL_MaxLevelLen,    2,
  427.     GTSL_LevelPlace,    PLACETEXT_RIGHT,
  428.     TAG_DONE,        0};
  429.  
  430.  
  431. /****************************************/
  432. /*                    */
  433. /*  IntuiStringGadgets + SpecialInfos   */
  434. /*                    */
  435. /****************************************/
  436.  
  437. /* I used non GT-gadgets, because I don't want no borders around */
  438. struct Gadget StrGad[]={
  439.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  440.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  441.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  442.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  443.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  444.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  445.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  446.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  447.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  448.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  449.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  450.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  451.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  452.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},
  453.     {NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL},{NULL,0,0,0,0,NULL,GACT_RELVERIFY|GACT_STRINGEXTEND,GTYP_STRGADGET,NULL,NULL,NULL,NULL,NULL,0,NULL}};
  454. struct StringInfo si[] = {
  455.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  456.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  457.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  458.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  459.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  460.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  461.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  462.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  463.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  464.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  465.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  466.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  467.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  468.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},
  469.     {NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL},{NULL,NULL,0,MAXCHARS,0,0,0,0,0,NULL,NULL,NULL}};
  470.  
  471.  
  472. /****************************************/
  473. /*                    */
  474. /*          GadToolsGadgets             */
  475. /*                    */
  476. /****************************************/
  477.  
  478. struct NewGadget ListVG        = {10,10,10,10,NULL,&TOPAZ80,50,NULL,NULL,NULL};
  479. struct NewGadget DolbyA        = {10,10,10,10,NULL,&TOPAZ80,40,NULL,NULL,NULL};
  480. struct NewGadget DolbyB        = {10,10,10,10,NULL,&TOPAZ80,41,NULL,NULL,NULL};
  481. struct NewGadget SourceA    = {10,10,10,10,NULL,&TOPAZ80,42,NULL,NULL,NULL};
  482. struct NewGadget SourceB    = {10,10,10,10,NULL,&TOPAZ80,43,NULL,NULL,NULL};
  483. struct NewGadget Next        = {10,10,10,10,">" ,&TOPAZ80,44,PLACETEXT_IN,NULL,NULL};
  484. struct NewGadget Prev        = {10,10,10,10,"<" ,&TOPAZ80,45,PLACETEXT_IN,NULL,NULL};
  485. struct NewGadget Current    = {10,10,10,10,NULL,&TOPAZ80,31,NULL,NULL,NULL};
  486.  
  487. /****************************************/
  488. /*                    */
  489. /*           GadToolsMenus              */
  490. /*                    */
  491. /****************************************/
  492.  
  493. const struct NewMenu MainMenu[] = {
  494.     {NM_TITLE,"Project"        ,NULL,0,0,NULL            },/* PROJECT */
  495.     {NM_ITEM ,"Load..."        ,"L" ,0,0,MENU_PROJ_LOAD    },
  496.     {NM_ITEM ,NM_BARLABEL            ,NULL,0,0,NULL            },
  497.     {NM_ITEM ,"Save"        ,"S" ,0,0,MENU_PROJ_SAVE    },
  498.     {NM_ITEM ,"Save as..."        ,NULL,0,0,MENU_PROJ_SAVEAS    },
  499.     {NM_ITEM ,"Info"        ,NULL,0,0,MENU_PROJ_INFO    },
  500.     {NM_ITEM ,"About"        ,NULL,0,0,MENU_PROJ_ABOUT    },
  501.     {NM_ITEM ,"Delete this MC..."    ,"D" ,0,0,MENU_PROJ_DELETE    },
  502.     {NM_ITEM ,"Print..."        ,"P" ,0,0,MENU_PROJ_PRINT    },
  503.     {NM_ITEM ,NM_BARLABEL           ,NULL,0,0,NULL            },
  504.     {NM_ITEM ,"Quit"        ,"Q" ,0,0,MENU_PROJ_QUIT    },
  505.  
  506.     {NM_TITLE,"Examine Data"    ,NULL,0,0,NULL            },/* SEARCH, LIST */
  507.     {NM_ITEM ,"Search"        ,NULL,0,0,NULL            },
  508.     {NM_SUB  ,"Interprets..."    ,NULL,0,0,MENU_SEARCH_INTER    },
  509.     {NM_SUB  ,"LP titles..."    ,NULL,0,0,MENU_SEARCH_LP    },
  510.     {NM_SUB  ,"Songnames..."    ,NULL,0,0,MENU_SEARCH_SONG    },
  511.     {NM_SUB  ,"Search anything..."  ,"F" ,0,0,MENU_SEARCH_ANYTHING    },
  512.  
  513.     {NM_ITEM ,NM_BARLABEL            ,NULL,0,0,NULL            },
  514.     {NM_ITEM ,"List"        ,NULL,0,0,NULL            },/* SEARCH */
  515.     {NM_SUB  ,"Interprets"        ,NULL,0,0,MENU_LIST_INTER    },
  516.     {NM_SUB  ,"Albums"        ,NULL,0,0,MENU_LIST_LP        },
  517.     {NM_SUB  ,"Songnames"        ,"N" ,0,0,MENU_LIST_SONG    },
  518.  
  519.     {NM_TITLE,"Special"        ,NULL,0,0,NULL            },/* SPECIAL */
  520.     {NM_ITEM ,"Edit Owner's Name...",NULL,0,0,MENU_SPECIAL_NAME    },
  521.     {NM_ITEM ,"Edit MC"        ,"E" ,0,0,MENU_SPECIAL_EDIT    },
  522.     {NM_ITEM ,"Color palette..."    ,"C" ,0,0,MENU_SPECIAL_PALETTE    },
  523.  
  524.     {NM_END}
  525. };
  526.